(function( $ ){
    // 当domReady的时候开始初始化
    $(function() {
    	
    	//上传资料
    	var Qiniu_UploadUrl = "http://up.qiniu.com";
    	//var Qiniu_UploadUrl = "https://up.qbox.me";
    	var Qiniu_GetTokenUrl = "${basePath}/QiniuFileController/getToken";
    	var Qiniu_encodeUrl = "${basePath}/QiniuFileController/encodeMedia";

    	var Qiniutoken;
    	var Qiniukey;
    	
    	
    	function uploadFile(fileObj, modeId, ulId, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId,attachmentTypeNames) {
    		//prompt层
    		var customLabelName = null;
    		if(customLabel) {
    			  layer.prompt({title: '请输入文件标签，并确认', formType: 0, end:function(){
    				  fileObj.value = '';
    			  }}, function(text, index){
    				if(text.length>5){
    					 layer.tips('请输入6个以下字符', '.layui-layer-input',{tips: 2});
    					return;
    				}
    				layer.close(index);
    			    customLabelName = text;
    			 	uploadFileAction(fileObj, modeId, ulId,customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId);
    				fileObj.value = '';
    			  });
    		} else {
    			uploadFileAction(fileObj, modeId, ulId,customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId);
    			fileObj.value = '';
    		}
    	}

    	function uploadFileAction(fileObj, modeId, ulId,customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId){
    		var f = $(fileObj)[0].files[0];
    	    var filePath = fileObj.value;
    	    if(!filePath || filePath == '') {
    	    	fileObj.value = '';
    	    	return;
    	    }
    	    //文件名
    	    var fileNameIndex = filePath.lastIndexOf("\/") + 1;
    	    var fileName = filePath;
    	    if(fileNameIndex > 0){
    	    	fileName = fileName.substring(fileNameIndex);
    	    }
    	    //文件名
    	    var fileNameIndex2 = fileName.lastIndexOf("\\") + 1;
    	    if(fileNameIndex2 > 0){
    	    	fileName = fileName.substring(fileNameIndex2);
    	    }
    	    
    	    //文件后缀
    	    var subfixIndex = fileName.lastIndexOf(".") + 1;
    	    if(subfixIndex <= 0) {
    	    	layer.msg("已取消或文件格式错误", {icon: 7});
    	    	return;
    	    }
    	    jsJustUpload(f, fileName.substring(subfixIndex), ulId, fileObj, fileName, modeId, customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId);
    	}

    	function getToken(fileType) {
    		fileType = fileType || 'png';
    	    htmlobj = $.ajax({
    	        url: Qiniu_GetTokenUrl,
    	        type: 'POST',
    	        async: false,
    	        data:{fileType:fileType}
    	    });
    	    var json = JSON.parse(htmlobj.responseText).result;
    	    Qiniutoken = json.token;
    	    Qiniukey = json.uuid; //文件路径
    	}

    	function encode(fileName, mediaType, attachmentId) {
    	    htmlobj = $.ajax({
    	        data: {
    	            fileName: fileName,
    	            mediaType:mediaType,
    	            attachmentId:attachmentId
    	        },
    	        url: Qiniu_encodeUrl,
    	        type: 'POST',
    	        async: false
    	    });
    	    /* Qiniukey = JSON.parse(htmlobj.responseText).result; //当前上传文件任务ID */
    	}
    	//改函数要求浏览器必须要支持html5
    	function jsJustUpload(f, fileType, ulId, fileObj, fileName, modeId, customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId) {
    		$('#model_layer').show();
    	    var xhr;
    	    if(window.XMLHttpRequest){  
    	    	xhr=new XMLHttpRequest();  
    	    } else if(window.ActiveXObject){  
    	        var activeName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];  
    	        for(var i=0;i<activeName.length;i++){  
    	            try{  
    	            	xhr=new ActiveXObject(activeName[i]);  
    	                break;  
    	            }catch(e){  
    	             	if(console){
    	             		console.info('ActiveXObject 创建失败');
    	             	}            
    	            }  
    	        }  
    	    }  
    	    xhr.open('POST', Qiniu_UploadUrl, true);
    	    var formData = new FormData();
    	    getToken(fileType);
    	    if (Qiniukey && Qiniukey != '') {
    	        formData.append('key', Qiniukey);
    	    }
    	    formData.append('token', Qiniutoken);
    	    formData.append('file', f);
    	    xhr.onreadystatechange = function (response) {
    	        if (xhr.readyState == 4 && xhr.status == 200) {
    	        	getUrl(ulId, fileObj, fileName, modeId, customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId);
    	        	$('#model_layer').hide();
    	        } else if (xhr.status != 200 && xhr.responseText) {
    	        	if(console) {
    	            	console.info("服务传输异常");
    	            }
    	        	$('#model_layer').hide();
    	        	layer.msg('上传失败', {icon: 2});
    	        }
    	    };
    	    xhr.send(formData);
    	}

    	function getUrl(ulId, fileObj, fileName, modeId, customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId){
    		if(!Qiniukey || Qiniukey==""){
    			return;
    		}
    		$.dpAjax({
    			show:false,
    			async:false,
    	 		url:'${basePath}/QiniuFileController/getURL',
    				data:{key:Qiniukey,bigImage:true},
    				success: function(datas){
    	 			 if(datas.flag == "100100"){
    	 				var urls = datas.result;
    					saveFile(ulId, fileName, urls, fileObj, modeId, customLabelName, customLabel, isAdd, fileLabelLi, defaltLabelNameLi,subId);
    					return;
    				  }
    				  if(datas.flag == "100200"){
    				      $.fn.showDatas({"datas":datas});
    	             	  return;
    	              }
    				  layer.msg(datas.message, {icon: 2});
    	         }
    	 	});
    	}

    	function parseAttachmentType(){
    		if(Qiniukey.endWith('mp4') || Qiniukey.endWith('mp3') || Qiniukey.endWith('avi') || Qiniukey.endWith('rm') || Qiniukey.endWith('wmv') || Qiniukey.endWith('mov')
    			|| Qiniukey.endWith('MP4') || Qiniukey.endWith('MP3') || Qiniukey.endWith('AVI') || Qiniukey.endWith('RM') || Qiniukey.endWith('WMV') || Qiniukey.endWith('MOV')) {
    			return '${attachmentTypeNames.VIDEO}';
    		} else if(Qiniukey.endWith('png') || Qiniukey.endWith('jpg') || Qiniukey.endWith('gif') || Qiniukey.endWith('bmp') || Qiniukey.endWith('jpeg')
    				|| Qiniukey.endWith('PNG') || Qiniukey.endWith('JPG') || Qiniukey.endWith('GIF') || Qiniukey.endWith('BMP') || Qiniukey.endWith('JPEG')) {
    			return '${attachmentTypeNames.IMAGE}';
    		} else if(Qiniukey.endWith('doc') || Qiniukey.endWith('docx')) {
    			return '${attachmentTypeNames.WORD}';
    		} else if(Qiniukey.endWith('xls') || Qiniukey.endWith('xlsx')) {
    			return '${attachmentTypeNames.EXCEL}';
    		} else {
    			return '${attachmentTypeNames.OTHER}';
    		}
    	}
    	/* 
    	BMP、JPG、JPEG、PNG、GIF

    	视频：avi 、rmvb 、rm  .wmv 、mp4 */
    	function parseAttachmentTypeAjax(){
    		if(Qiniukey.endWith('mp4') || Qiniukey.endWith('mp3') || Qiniukey.endWith('avi') || Qiniukey.endWith('rm') || Qiniukey.endWith('wmv') || Qiniukey.endWith('mov')
    				|| Qiniukey.endWith('MP4') || Qiniukey.endWith('MP3') || Qiniukey.endWith('AVI') || Qiniukey.endWith('RM') || Qiniukey.endWith('WMV') || Qiniukey.endWith('MOV')) {
    			return attachmentTypeNames.VIDEO;
    		} else if(Qiniukey.endWith('png') || Qiniukey.endWith('jpg') || Qiniukey.endWith('gif') || Qiniukey.endWith('bmp') || Qiniukey.endWith('jpeg')
    				|| Qiniukey.endWith('PNG') || Qiniukey.endWith('JPG') || Qiniukey.endWith('GIF') || Qiniukey.endWith('BMP') || Qiniukey.endWith('JPEG')) {
    			return attachmentTypeNames.IMAGE;
    		} else if(Qiniukey.endWith('doc') || Qiniukey.endWith('docx')) {
    			return attachmentTypeNames.WORD;
    		} else if(Qiniukey.endWith('xls') || Qiniukey.endWith('xlsx')) {
    			return attachmentTypeNames.EXCEL;
    		} else {
    			return attachmentTypeNames.OTHER;
    		}
    	}

    	function parseAttachmentSort(ulId){
    		if(!ulId || ulId == '') {
    			return "";
    		}
    		if(ulId == 'SHEN_FEN_ZHENG_MING'){
    			return '${attachmentSortNames.SHEN_FEN_ZHENG_MING}';
    		} else if(ulId == 'ZHONG_YAO_YUAN_JIAN'){
    			return '${attachmentSortNames.ZHONG_YAO_YUAN_JIAN}';
    		} else if(ulId == 'PEI_OU_SHEN_FEN_ZHENG_MING'){
    			return '${attachmentSortNames.PEI_OU_SHEN_FEN_ZHENG_MING}';
    		} else if(ulId == 'DAN_BAO_REN_SHEN_FEN_ZHENG_MING_1'){
    			return '${attachmentSortNames.DAN_BAO_REN_SHEN_FEN_ZHENG_MING_1}';
    		} else if(ulId == 'DAN_BAO_REN_SHEN_FEN_ZHENG_MING_2'){
    			return '${attachmentSortNames.DAN_BAO_REN_SHEN_FEN_ZHENG_MING_2}';
    		} else if(ulId == 'DAN_BAO_REN_SHEN_FEN_ZHENG_MING_3'){
    			return '${attachmentSortNames.DAN_BAO_REN_SHEN_FEN_ZHENG_MING_3}';
    		} else if(ulId == 'DAN_BAO_REN_SHEN_FEN_ZHENG_MING_4'){
    			return '${attachmentSortNames.DAN_BAO_REN_SHEN_FEN_ZHENG_MING_4}';
    		} else if(ulId == 'JU_ZHU_ZHENG_MING'){
    			return '${attachmentSortNames.JU_ZHU_ZHENG_MING}';
    		} else if(ulId == 'YIN_HANG_LIU_SHUI'){
    			return '${attachmentSortNames.YIN_HANG_LIU_SHUI}';
    		} else if(ulId == 'ZHU_JIE_REN_QIAN_ZI'){
    			return '${attachmentSortNames.ZHU_JIE_REN_QIAN_ZI}';
    		} else if(ulId == 'PEI_OU_QIAN_ZI'){
    			return '${attachmentSortNames.PEI_OU_QIAN_ZI}';
    		} else if(ulId == 'JIA_FANG'){
    			return '${attachmentSortNames.JIA_FANG}';
    		} else if(ulId == 'DAN_WEI_FANG'){
    			return '${attachmentSortNames.DAN_WEI_FANG}';
    		} else if(ulId == 'TI_CHE_ZI_LIAO'){
    			return '${attachmentSortNames.TI_CHE_ZI_LIAO}';
    		} else if(ulId == 'KAI_KA_ZI_LIAO'){
    			return '${attachmentSortNames.KAI_KA_ZI_LIAO}';
    		} else if(ulId == 'YONG_HU_TOU_XIANG'){
    			return '${attachmentSortNames.YONG_HU_TOU_XIANG}';
    		} else if(ulId == 'YING_YE_ZHI_ZHAO'){
    			return '${attachmentSortNames.YING_YE_ZHI_ZHAO}';
    		} else if(ulId == 'GONG_SI_LIU_SHUI'){
    			return '${attachmentSortNames.GONG_SI_LIU_SHUI}';
    		} else if(ulId == 'YAN_ZI_BAO_GAO'){
    			return '${attachmentSortNames.YAN_ZI_BAO_GAO}';
    		} else if(ulId == 'QI_TA_ZI_LIAO_ZHAO_PIAN'){
    			return '${attachmentSortNames.QI_TA_ZI_LIAO_ZHAO_PIAN}';
    		} else if(ulId == 'QI_TA_ZI_LIAO_SHI_PIN'){
    			return '${attachmentSortNames.QI_TA_ZI_LIAO_SHI_PIN}';
    			
    		//扩展字段
    		} else if(ulId == 'QIAN_SHU_HE_TONG'){
    			return '${attachmentSortNames.QIAN_SHU_HE_TONG}';
    		} else if(ulId == 'TUI_KUAN_FU_JIAN'){
    			return '${attachmentSortNames.TUI_KUAN_FU_JIAN}';
    		} else if(ulId == 'GUO_HU_ZI_LIAO'){
    			return '${attachmentSortNames.GUO_HU_ZI_LIAO}';
    		} else if(ulId == 'TI_CHE_QI_CHE_ZI_LIAO'){
    			return '${attachmentSortNames.TI_CHE_QI_CHE_ZI_LIAO}';
    		} else if(ulId == 'GUO_HU_QI_CHE_ZI_LIAO'){
    			return '${attachmentSortNames.GUO_HU_QI_CHE_ZI_LIAO}';
    		}
    		//非作用域时用到 modify by zzj
    		return ulId;
    	}
    	
        var $wrap = $('#uploader'),

            // 图片容器
            $queue = $( '<ul class="filelist"></ul>' )
                .appendTo( $wrap.find( '.queueList' ) ),

            // 状态栏，包括进度和控制按钮
            $statusBar = $wrap.find( '.statusBar' ),

            // 文件总体选择信息。
            $info = $statusBar.find( '.info' ),

            // 上传按钮
            $upload = $wrap.find( '.uploadBtn' ),

            // 没选择文件之前的内容。
            $placeHolder = $wrap.find( '.placeholder' ),

            $progress = $statusBar.find( '.progress' ).hide(),

            // 添加的文件数量
            fileCount = 0,

            // 添加的文件总大小
            fileSize = 0,

            // 优化retina, 在retina下这个值是2
            ratio = window.devicePixelRatio || 1,

            // 缩略图大小
            thumbnailWidth = 110 * ratio,
            thumbnailHeight = 110 * ratio,

            // 可能有pedding, ready, uploading, confirm, done.
            state = 'pedding',

            // 所有文件的进度信息，key为file id
            percentages = {},
            // 判断浏览器是否支持图片的base64
            isSupportBase64 = ( function() {
                var data = new Image();
                var support = true;
                data.onload = data.onerror = function() {
                    if( this.width != 1 || this.height != 1 ) {
                        support = false;
                    }
                }
                data.src = "";
                return support;
            } )(),

            // 检测是否已经安装flash，检测flash的版本
            flashVersion = ( function() {
                var version;

                try {
                    version = navigator.plugins[ 'Shockwave Flash' ];
                    version = version.description;
                } catch ( ex ) {
                    try {
                        version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')
                                .GetVariable('$version');
                    } catch ( ex2 ) {
                        version = '0.0';
                    }
                }
                version = version.match( /\d+/g );
                return parseFloat( version[ 0 ] + '.' + version[ 1 ], 10 );
            } )(),

            supportTransition = (function(){
                var s = document.createElement('p').style,
                    r = 'transition' in s ||
                            'WebkitTransition' in s ||
                            'MozTransition' in s ||
                            'msTransition' in s ||
                            'OTransition' in s;
                s = null;
                return r;
            })(),

            // WebUploader实例
            uploader;

        if ( !WebUploader.Uploader.support('flash') && WebUploader.browser.ie ) {

            // flash 安装了但是版本过低。
            if (flashVersion) {
                (function(container) {
                    window['expressinstallcallback'] = function( state ) {
                        switch(state) {
                            case 'Download.Cancelled':
                                alert('您取消了更新！')
                                break;

                            case 'Download.Failed':
                                alert('安装失败')
                                break;

                            default:
                                alert('安装已成功，请刷新！');
                                break;
                        }
                        delete window['expressinstallcallback'];
                    };

                    var swf = '${basePath }/js/webuploader/expressInstall.swf';
                    // insert flash object
                    var html = '<object type="application/' +
                            'x-shockwave-flash" data="' +  swf + '" ';

                    if (WebUploader.browser.ie) {
                        html += 'classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
                    }

                    html += 'width="100%" height="100%" style="outline:0">'  +
                        '<param name="movie" value="' + swf + '" />' +
                        '<param name="wmode" value="transparent" />' +
                        '<param name="allowscriptaccess" value="always" />' +
                    '</object>';

                    container.html(html);

                })($wrap);

            // 压根就没有安转。
            } else {
                $wrap.html('<a href="http://www.adobe.com/go/getflashplayer" target="_blank" border="0"><img alt="get flash player" src="http://www.adobe.com/macromedia/style_guide/images/160x41_Get_Flash_Player.jpg" /></a>');
            }

            return;
        } else if (!WebUploader.Uploader.support()) {
            alert( 'Web Uploader 不支持您的浏览器！');
            return;
        }

        // 实例化
        uploader = WebUploader.create({
            pick: {
                id: '#filePicker',
                label: '点击选择文件'
            },
            formData: {
                uid: 123
            },
            dnd: '#dndArea',
            paste: '#uploader',
            swf: '${basePath }/js/webuploader/Uploader.swf',
            chunked: true,
            chunkSize: 512 * 1024,
            server: 'http://up.qiniu.com/',
            method:'POST',
            accept: {
        	  title: 'Images',
        	  extensions: 'jpg,jpeg,png',
        	  mimeTypes: 'image/jpg,image/jpeg,image/png'   //修改位置
        	},
        	formData: {  
                token : Qiniutoken   
            } , 
            // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候，把图片打开。
            disableGlobalDnd: true,
            fileNumLimit: 10,
            fileSizeLimit: 2000 * 1024 * 1024,    // 200 M
            fileSingleSizeLimit: 500 * 1024 * 1024    // 50 M
        });

        // 拖拽时不接受 js, txt 文件。
        uploader.on( 'dndAccept', function( items ) {
            var denied = false,
                len = items.length,
                i = 0,
                // 修改js类型
                unAllowed = 'text/plain;application/javascript ';

            for ( ; i < len; i++ ) {
                // 如果在列表里面
                if ( ~unAllowed.indexOf( items[ i ].type ) ) {
                    denied = true;
                    break;
                }
            }

            return !denied;
        });

        // 添加“添加文件”的按钮，
        uploader.addButton({
            id: '#filePicker2',
            label: '继续添加'
        });
        // 添加“添加下一个”模型的按钮，
        /*uploader.addButton({
            id: '#addModel',
            label: '添加下一个'
        });*/
        uploader.on('ready', function() {
            window.uploader = uploader;
        });

        // 当有文件添加进来时执行，负责view的创建
        function addFile( file ) {
            var $li = $( '<li id="' + file.id + '">' +
                    '<p class="title">' + file.name + '</p>' +
                    '<p class="imgWrap"></p>'+
                    '<p class="progress"><span></span></p>' +
                    '</li>' ),

                $btns = $('<div class="file-panel">' +
                    '<span class="cancel">删除</span>' +
                    '<span class="rotateRight">向右旋转</span>' +
                    '<span class="rotateLeft">向左旋转</span></div>').appendTo( $li ),
                $prgress = $li.find('p.progress span'),
                $wrap = $li.find( 'p.imgWrap' ),
                $info = $('<p class="error"></p>'),

                showError = function( code ) {
                    switch( code ) {
                        case 'exceed_size':
                            text = '文件大小超出';
                            break;

                        case 'interrupt':
                            text = '上传暂停';
                            break;

                        default:
                            text = '上传失败，请重试';
                            break;
                    }

                    $info.text( text ).appendTo( $li );
                };

            if ( file.getStatus() === 'invalid' ) {
                showError( file.statusText );
            } else {
                // @todo lazyload
                $wrap.text( '预览中' );
                uploader.makeThumb( file, function( error, src ) {
                    var img;

                    if ( error ) {
                        $wrap.text( '不能预览' );
                        return;
                    }

                    if( isSupportBase64 ) {
                        img = $('<img src="'+src+'">');
                        $wrap.empty().append( img );
                    } else {
                        $.dpAjax('http://up.qiniu.com/', {
                            method: 'POST',
                            data: src,
                            dataType:'json'
                        }).done(function( response ) {
                            if (response.result) {
                                img = $('<img src="'+response.result+'">');
                                $wrap.empty().append( img );
                            } else {
                                $wrap.text("预览出错");
                            }
                        });
                    }
                }, thumbnailWidth, thumbnailHeight );

                percentages[ file.id ] = [ file.size, 0 ];
                file.rotation = 0;
            }

            file.on('statuschange', function( cur, prev ) {
                if ( prev === 'progress' ) {
                    $prgress.hide().width(0);
                } else if ( prev === 'queued' ) {
                    $li.off( 'mouseenter mouseleave' );
                    $btns.remove();
                }

                // 成功
                if ( cur === 'error' || cur === 'invalid' ) {
                    console.log( file.statusText );
                    showError( file.statusText );
                    percentages[ file.id ][ 1 ] = 1;
                } else if ( cur === 'interrupt' ) {
                    showError( 'interrupt' );
                } else if ( cur === 'queued' ) {
                    percentages[ file.id ][ 1 ] = 0;
                } else if ( cur === 'progress' ) {
                    $info.remove();
                    $prgress.css('display', 'block');
                } else if ( cur === 'complete' ) {
                    $li.append( '<span class="success"></span>' );
                }

                $li.removeClass( 'state-' + prev ).addClass( 'state-' + cur );
            });

            $li.on( 'mouseenter', function() {
                $btns.stop().animate({height: 30});
            });

            $li.on( 'mouseleave', function() {
                $btns.stop().animate({height: 0});
            });

            $btns.on( 'click', 'span', function() {
                var index = $(this).index(),
                    deg;

                switch ( index ) {
                    case 0:
                        uploader.removeFile( file );
                        return;

                    case 1:
                        file.rotation += 90;
                        break;

                    case 2:
                        file.rotation -= 90;
                        break;
                }

                if ( supportTransition ) {
                    deg = 'rotate(' + file.rotation + 'deg)';
                    $wrap.css({
                        '-webkit-transform': deg,
                        '-mos-transform': deg,
                        '-o-transform': deg,
                        'transform': deg
                    });
                } else {
                    $wrap.css( 'filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ (~~((file.rotation/90)%4 + 4)%4) +')');
                }
            });

            $li.appendTo( $queue );
        }

        // 负责view的销毁
        function removeFile( file ) {
            var $li = $('#'+file.id);

            delete percentages[ file.id ];
            updateTotalProgress();
            $li.off().find('.file-panel').off().end().remove();
        }

        function updateTotalProgress() {
            var loaded = 0,
                total = 0,
                spans = $progress.children(),
                percent;

            $.each( percentages, function( k, v ) {
                total += v[ 0 ];
                loaded += v[ 0 ] * v[ 1 ];
            } );

            percent = total ? loaded / total : 0;


            spans.eq( 0 ).text( Math.round( percent * 100 ) + '%' );
            spans.eq( 1 ).css( 'width', Math.round( percent * 100 ) + '%' );
            updateStatus();
        }

        function updateStatus() {
            var text = '', stats;

            if ( state === 'ready' ) {
                text = '选中' + fileCount + '张图片，共' +
                        WebUploader.formatSize( fileSize ) + '。';
            } else if ( state === 'confirm' ) {
                stats = uploader.getStats();
                if ( stats.uploadFailNum ) {
                    text = '已成功上传' + stats.successNum+ '文件，'+
                        stats.uploadFailNum + '文件上传失败，<a class="retry" href="#">重新上传</a>失败或<a class="ignore" href="#">忽略</a>'
                }

            } else {
                stats = uploader.getStats();
                text = '共' + fileCount + '个（' +
                        WebUploader.formatSize( fileSize )  +
                        '），已上传' + stats.successNum + '个';

                if ( stats.uploadFailNum ) {
                    text += '，失败' + stats.uploadFailNum + '个';
                }
            }

            $info.html( text );
        }

        function setState( val ) {
            var file, stats;

            if ( val === state ) {
                return;
            }

            $upload.removeClass( 'state-' + state );
            $upload.addClass( 'state-' + val );
            state = val;

            switch ( state ) {
                case 'pedding':
                    $placeHolder.removeClass( 'element-invisible' );
                    $queue.hide();
                    $statusBar.addClass( 'element-invisible' );
                    uploader.refresh();
                    break;

                case 'ready':
                    $placeHolder.addClass( 'element-invisible' );
                    $( '#filePicker2' ).removeClass( 'element-invisible');
                    $queue.show();
                    $statusBar.removeClass('element-invisible');
                    uploader.refresh();
                    break;

                case 'uploading':
                    $( '#filePicker2' ).addClass( 'element-invisible' );
                    $progress.show();
                    $upload.text( '暂停上传' );
                    break;

                case 'paused':
                    $progress.show();
                    $upload.text( '继续上传' );
                    break;

                case 'confirm':
                    $progress.hide();
                    $( '#filePicker2' ).removeClass( 'element-invisible' );
                    $upload.text( '开始上传' );
                    stats = uploader.getStats();
                    if ( stats.successNum && !stats.uploadFailNum ) {
                        setState( 'finish' );
                        return;
                    }
                    break;
                case 'finish':
                    stats = uploader.getStats();
                    if ( stats.successNum ) {
                        document.getElementById("shareUrl").style.visibility = 'visible';
                        createQrcode();
                    } else {
                        // 没有成功的图片，重设
                        state = 'done';
                        location.reload();
                    }
                    break;
            }

            updateStatus();
        }

        uploader.onUploadProgress = function( file, percentage ) {
            var $li = $('#'+file.id),
                $percent = $li.find('.progress span');

            $percent.css( 'width', percentage * 100 + '%' );
            percentages[ file.id ][ 1 ] = percentage;
            updateTotalProgress();
        };

        uploader.onFileQueued = function( file ) {
            fileCount++;
            fileSize += file.size;

            if ( fileCount === 1 ) {
                $placeHolder.addClass( 'element-invisible' );
                $statusBar.show();
            }

            addFile( file );
            setState( 'ready' );
            updateTotalProgress();
        };

        uploader.onFileDequeued = function( file ) {
            fileCount--;
            fileSize -= file.size;

            if ( !fileCount ) {
                setState( 'pedding' );
            }

            removeFile( file );
            updateTotalProgress();

        };

        uploader.on( 'all', function( type ) {
            var stats;
            switch( type ) {
                case 'uploadFinished':
                    setState( 'confirm' );
                    break;

                case 'startUpload':
                    setState( 'uploading' );
                    break;

                case 'stopUpload':
                    setState( 'paused' );
                    break;

            }
        });

        uploader.onError = function( code ) {
            alert( 'Eroor: ' + code );
        };

        $upload.on('click', function() {
            if ( $(this).hasClass( 'disabled' ) ) {
                return false;
            }

            if ( state === 'ready' ) {
                uploader.upload();
            } else if ( state === 'paused' ) {
                uploader.upload();
            } else if ( state === 'uploading' ) {
                uploader.stop();
            }
        });

        $info.on( 'click', '.retry', function() {
            uploader.retry();
        } );

        $info.on( 'click', '.ignore', function() {
            alert( 'todo' );
        } );

        $upload.addClass( 'state-' + state );
        updateTotalProgress();
    });

})( jQuery );